package com.heima.leetcode.practice;

/**
 * @author 勾新杰
 * @version 1.0
 * @description: leetcode 309. 最佳买卖股票时机含冷冻期
 * @date 2025/2/26 10:49
 */
public class E309 {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        // 1. 定义dp数组，hold表示第i天持有股票的最大利润
        int[] hold = new int[n];
        // 2. 定义dp数组，sold表示第i天卖出股票的最大利润
        int[] sold = new int[n];
        // 3. 定义dp数组，cold表示第i天为冻结期的最大利润
        int[] cold = new int[n];
        // 4. 第i天不是冻结期且什么都不做的情况在代码中体现。
        // 5. 初始化hold数组，第一天买入股票
        hold[0] = -prices[0];
        for (int i = 1; i < n; i++){
            // 第i天要么什么都不做，继续持有上一天的股票，要么买入股票
            hold[i] = Math.max(hold[i - 1], cold[i - 1] - prices[i]);
            sold[i] = hold[i - 1] + prices[i];
            cold[i] = Math.max(cold[i - 1], sold[i - 1]);
        }
        return Math.max(cold[n - 1], sold[n - 1]);
    }
}
